<?php session_start();
include("../config.php");
require_once("cLogin.php");
require_once("cResultado.php");
require_once("PHPLogger.php");
require_once("MisPuntos.php");
$LOGGER = new PHPLogger(LOGGER_PATH, LOGGER_LEVEL);
$LOGIN = unserialize($_SESSION['loginClass']);
class BykomCliente{

	function getResultado($mysqli) {
		if ($rs = $mysqli->store_result()) {
       		if($rs->num_rows >0) {
    			$i=0;
				while ($finfo = $rs->fetch_field()) {
              	$campos[$finfo->name]=$i;
              	$i++;
				}
				while ($row = $rs->fetch_row()) $vec[] = $row;
				$rs->free_result();
				return new cResultado($campos, $vec);
       		}
			$mysqli->close();
		}
		return new cResultado();
	}
	/**********************************************************************/
	function LoginInitialValidation($loginClass){
		global $LOGGER;
		$LOGGER->addLine('DEBUG', 'Login -> Initial Validation Start');
		//REALIZO CONSULTA INICIAL AL SERVER
		$privateKeyCode = '1@%(&0A';
		$publicKeyCode = PUBLICKEYCODE;
		$resultado = BykomCliente::LoginDataActivation($privateKeyCode.$publicKeyCode);
		if (($resultado->cantidad() == 0)||(!$resultado->campo('data', 0))){
			//El codigo de llave del cliente es invalido o no existe
			$LOGGER->addLine('INFO', 'El codigo de llave del cliente es invalido o no existe');
			$loginClass->errorCode = 19;
			return $loginClass;
		}
		//Verificacion de admin corriendo
		$LOGGER->addLine('DEBUG', "TimeMaster:" . $resultado->campo('timexMaster', 0) . " minutos");
		if (!$resultado->campo('timexMaster', 0)){
			$LOGGER->addLine('INFO', 'El servidor ADMIN no se encuentra encendido. First time o se intento sobrescribir el valor!');
			$loginClass->errorCode = 25;
			return $loginClass;
		}
		$LOGGER->addLine('DEBUG', "Diferencia:" .$resultado->campo('dif', 0) . " minutos");
		if ($resultado->campo('dif', 0) > 120) {
			$LOGGER->addLine('INFO', 'El servidor ADMIN no se encuentra encendido!. Diferencia mayor a 120 min');
			$loginClass->errorCode = 25;
			return $loginClass;
		}
		$sRestricciones = $resultado->campo("restricciones",0);
		$LOGGER->addLine('INFO', "Restricciones: " .$sRestricciones);
		$vRestricciones = restricciones($sRestricciones);//funcion en utils.php
		foreach($vRestricciones as $key=>$value){
			$loginClass->$key = $value;
		}
		//INICIALIZO LAS VARIABLES DE DATA:
		$data = str_replace("|",",",$resultado->campo('data', 0));
		$dataArray = split(",",$data);
		$TI = substr($dataArray[0],3); //Tipo de cuenta
		$CC = substr($dataArray[1],3); //Cantidad de cuentas "PRO" concurrentes
		$HK = substr($dataArray[2],3); //Key de activacion del servidor
		$VE = substr($dataArray[3],3); //Fecha de vencimiento de la key del servidor
		$HA = substr($dataArray[4],3); //Fecha actual del servidor para comprovacion
		$VS = substr($dataArray[5],3); //Estado de vencimiento: 1=llave vencida, 0=llave OK
		$MO = substr($dataArray[6],3); //Acceso desde celular: 0=NO, 1=SI
		$_SESSION['cuentaspro'] = $CC;
		//(1) Validacion del numero de llave
		//El codigo de llave del cliente no coincide con el del servidor
		if ($publicKeyCode!=$HK){
			$LOGGER->addLine('ERROR', 'El codigo de llave del cliente no coincide con el del servidor');
			$loginClass->errorCode = 20;
			return $loginClass;
		}
		//(2) Validacion del vencimiento de la llave
		//La llave del producto se ha vencido. Contactese con su proveedor para mas detalles.
		if ($VS == 1){
			$LOGGER->addLine('ERROR', 'La llave del producto se ha vencido.');
			$loginClass->errorCode = 21;
			return $loginClass;
		}
		//(3) VALIDACIONES GENERALES Y COMPLETO DATOS DE $loginClass.
		$loginClass = BykomCliente::LoginAbstracto($loginClass);

		//(4) Validacion tipo de cuenta.
		if (($TI==0)&&($loginClass->objetivoDB > 1)){
			$loginClass->errorCode = 22;
			$LOGGER->addLine('ERROR', 'El tipo de cuenta con la que intenta ingresar no es valido.');
			return $loginClass;
		}else if($TI==1) //obligo a que la cuenta se comporte como NORMAL
				$loginClass->isPRO = 0;

		if ($loginClass->errorCode == 0) {	//SI NO EXISTEN ERRORES HASTA EL MOMENTO
			//(5) Validacion de cantidad de alias concurrentes por cuenta (la cuenta tb suma).
			//SOLO SE VALIDA SI LA CUENTA NO ES DEL TIPO DEALER.
			if ($loginClass->objetivo!=5){
				$ccc = BykomCliente::CountCuentasConcurrentes($loginClass->cuentaFk);
				if ($ccc<0){ //hubo un error
					$loginClass->errorCode = abs($ccc);
       				return $loginClass;
				}
     			if($loginClass->limitConnect <= $ccc){
					$loginClass->errorCode = 23;
					$LOGGER->addLine('ERROR', 'Se ha alcanzado el limite en la cantidad de cuentas/alias que estan logueadas en este momento.');
       				return $loginClass;
				}
			}

			//(6) Validacion de cantidad de cuentas PRO concurrentes por servidor.
//			$ccPc = BykomCliente::CountCuentasPROConcurrentes();
//			if ($ccPc<0){ //hubo un error
//				$loginClass->errorCode = abs($ccPc);
//       			return $loginClass;
//			}
//
//     		if($CC <= $ccPc){ //obligo a que la cuenta se comporte como NORMAL
//				$loginClass->isPRO = 0;
//			}

		}
		$loginClass->generarPermisos();

		if ($MO == NULL || $MO != 1) {
			$loginClass->accessPhoneGeneral = 0;
		} else {
			$loginClass->accessPhoneGeneral = 1;
		}

/*		echo("<script language='JavaScript' type='text/javascript'>");
		echo("alert('" . $SQL . "');");
		echo("</script>");*/

		return $loginClass;
	}

	/**********************************************************************/
	function CountCuentasConcurrentes($cuenta) { //retorna la cantidad de cuentas/alias que hay logueadas en el momento de la consulta
			$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     		if (mysqli_connect_errno())
       			return  -1; //codigo de error en negativo
			$SQL = " Select count(UL.`logueado`) as cantidad ".
				   " from `userlogued` UL ".
				   " where UL.`logueado` = 1 AND ( ".
				   " UL.`cuentaFk` = ".$cuenta." OR ".
				   "(".
				   " (UL.`objetivo` = 4) AND".
      			   " (UL.`cuentaFk` IN (Select AL.id from aliases AL where AL.`cuentaFk`=".$cuenta.")) ".
				   "))";

			if (!$mysqli->real_query($SQL)){
				$LOGGER->addLine('ERROR',"FUNCION: 'CountCuentasConcurrentes' " . $mysqli->error.' CONSULTA: '.$SQL );
       			return  -2; //codigo de error en negativo
			}

     	   	$resultado = BykomCliente::getResultado($mysqli);
		    return ($resultado->campo('cantidad', 0));
	}

	/**********************************************************************/
	function CountCuentasPROConcurrentes() { //retorna la cantidad de cuentas PRO que hay logueadas en el servidor en el momento de la consulta
			global $LOGGER;
			$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     		if (mysqli_connect_errno())
       			return  -1; //codigo de error en negativo
			$SQL = "SELECT count(*) as cantidad ".
				   "FROM `userlogued` UL ".
			       "WHERE UL.`logueado` = 1 AND ".
				   "( ";
			//PARA OBJETIVOS FIJO Y MOVIL
		    $SQL .=" ( ".
                   "  ((UL.`objetivo` = 1)or(UL.`objetivo` = 2))  and ".
                   "  (exists (select AM.`ORDER_ID` ".
                   "           from `abmacodigos` AM ".
                   "           where AM.`ORDER_ID` = UL.`cuentaFk` and ".
                   "                 AM.`OBJETIVO` = UL.`objetivo` and ".
                   "                 AM.`CLIENTE_PRO` = 1)) ".
                   " ) OR ";
			//PARA OBJETIVO FLOTA
            $SQL .=" ( ".
                   "  (UL.`objetivo` = 3) and ".
                   "  (exists (select TL.`ORDER_ID` ".
                   "           from `tlmapersonas` TL ".
                   "           where TL.`ORDER_ID` = UL.`cuentaFk` and ".
                   "                 TL.`CLIENTE_PRO` = 1)) ".
                   " ) OR ";
			//PARA OBJETIVO ALIAS
       		$SQL .=" ( ".
        		   "  (UL.`objetivo` = 4) and ".
        		   "  (exists (select AL.`id` ".
                   "           from `aliases` AL ".
                   "           where AL.`id` = UL.`cuentaFk` and ".
                   "                (( ".
                   "                  ((AL.`esFlota` = 1) AND ".
                   "                   (exists (select TLa.`ORDER_ID` ".
                   "                            from `tlmapersonas` TLa ".
                   "                            where TLa.`ORDER_ID` = AL.`cuentaFk` and ".
                   "                                  TLa.`CLIENTE_PRO` = 1) ".
                   "                            )) ".
                   "                 ) OR ".
                   "                 ( ".
                   "                  ((AL.`esFlota` = 0) AND ".
                   "                   (exists (select AMa.`ORDER_ID` ".
                   "                            from `abmacodigos` AMa ".
                   "                            where AMa.`ORDER_ID` = AL.`cuentaFk` and ".
                   "                                  AMa.`CLIENTE_PRO` = 1) ".
                   "                            ))".
                   "                 ))".
                   "          ) ".
                   "  ) ".
                   " ) OR";
			//PARA OBJETIVO DEALER (siempre es PRO)
       		$SQL .=" ( ".
        		   "  (UL.`objetivo` = 5) ".
				   " ) ".
       			   ") ";
			if (!$mysqli->real_query($SQL)){
			 	$LOGGER->addLine('ERROR',"FUNCION: 'CountCuentasPROConcurrentes' " . $mysqli->error.' CONSULTA: '.$SQL );
				return  -2; //codigo de error en negativo
			}

     	   	$resultado = BykomCliente::getResultado($mysqli);
		    return ($resultado->campo('cantidad', 0));
	}

	/**********************************************************************/
	function LoginAbstracto($loginClass) {
		if ($loginClass->objetivo == 4) {
   			$loginClass = BykomCliente::LoginAlias($loginClass);

		} else if ($loginClass->objetivo == 1 || $loginClass->objetivo == 2) {
   			$loginClass = BykomCliente::LoginCuenta($loginClass);

		} else if ($loginClass->objetivo == 3) {
   			$loginClass = BykomCliente::LoginFlota($loginClass);
   		} else if ($loginClass->objetivo == 5) {
			$loginClass = BykomCliente::LoginDealer($loginClass);
		}
   		$return = BykomCliente::ProcesarLogin($loginClass);
		$return->label = $return->getLabelLogin();
		$return->isBykom = 0;
		return $return;
	}

	/**********************************************************************/

	function LoginAlias($loginClass){
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR','FUNCION: "LoginAlias" '. mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$LOGGER->addLine('INFO', 'Login Alias -> "'.$loginClassActual->alias.'"');

		$SQL = "SELECT a.cuentaFK as cuentaFk,a.esFlota as esFlota,a.id as id, a.clave as clave, a.mail as mail, ";
		$SQL.= "CAST( ";
		$SQL.= "if(a.esFlota = '5',cast(d.login as char), ";
		$SQL.= "	if(a.esFlota = '1', ";
		$SQL.= "		CONCAT_WS(' - ', cast(rc.codigoAlfa as char), cast(abma2.ID_CL as char)), ";
		$SQL.= "		if(a.esFlota = '2', ";
		$SQL.= "			CONCAT_WS(' - ', cast(rc.codigoAlfa as char), cast(abma2.ID_CL as char)), ";
		$SQL.= "			cast(tlma2.USER_WEB as char) ";
        $SQL.= " 		)";
        $SQL.= "	)";
        $SQL.= " ) as char) as descripcion , a.permisoMonitor,
				a.permisoComandosGPRS,
				a.permisoComandosSMS,
				a.permisoVerReportes,
				a.permisoVerPuntos,
				a.permisoVerZonas,
				a.permisoVerContactos,
				a.permisoVerLogistica,
				a.permisoModificarPuntos,
				a.permisoModificarZonas,
				a.permisoModificarContactos,
				a.permisoModificarLogistica,
				a.permisoMobile,
				a.permisoAccedeSetup,
				a.permisoAccedeEventos,
				a.permisoAccedeUsuarios,
				a.permisoAccedeFacturas,
				a.permisoAccedeZonas,
				a.permisoAccedeContactos,
				a.permisoAccedeHorarios,
				a.habilitarFijo,
				a.habilitarMovil,
				a.habilitarFlota,
				a.habilitarRC,
				a.habilitarRCFijo,
				a.permisoVerRutas,
				a.permisoModificarRutas,
				a.permisoVerAgendaGral,
				a.permisoModificaAgendaGral,
				a.habilitado as habilitado,
				abma2.LOCKSTAT as lockStat,
				abma2.LOCKDATE as lockDate,
				now() as fechaActual ";
		$SQL.= "FROM aliases a ";
		$SQL.= "LEFT JOIN abmacodigos abma2 on (a.cuentaFk = abma2.ORDER_ID) ";
		$SQL.= "LEFT JOIN rcmacodigos rc on (rc.ORDER_ID = abma2.ID_RC) ";
		$SQL.= "LEFT JOIN tlmapersonas tlma2 on (a.cuentaFk = tlma2.ORDER_ID) ";
		$SQL.= "LEFT JOIN dealer d on d.id = a.cuentaFk ";
		$SQL.= "WHERE a.alias ='". trim($loginClassActual->alias) . "'";

	  	if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginAlias' " . $mysqli->error.' CONSULTA: '.$SQL );
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 5;
       		return  $loginClassActual;
     	}
     	if ($resultado->campo('habilitado', 0) == 0) {
     		$loginClassActual->errorCode = 53;
       		return  $loginClassActual;
     	}

		if($resultado->campo('esFlota', 0) != 1){
	     	$f1 = $resultado->campo('lockDate', 0);
	     	$f2 = $resultado->campo('fechaActual', 0);
	     	if($resultado->campo('lockStat', 0) == 1 && ( $f1 != null && !BykomCliente::fechaAnteriorA($f2,$f1) ) ){
	     		$loginClassActual->errorCode = 52;
	       		return  $loginClassActual;
	     	}
     	}

     	$loginClassActual->cuentaFk 	= $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota 		= $resultado->campo('esFlota', 0);
		$loginClassActual->tablaId 		= $resultado->campo('id', 0);
		$loginClassActual->passwordDB 	= $resultado->campo('clave', 0);
		$loginClassActual->labelCuenta 	= $resultado->campo('descripcion', 0);
     	$loginClassActual->mail 		= $resultado->campo('mail', 0);
     	$loginClassActual->objetivo 	= 4;
     	$loginClassActual->objetivoDB	= $resultado->campo('esFlota', 0);;
     	/////PERMISOS para el Alias///////
     	$iMonitorea 	= $resultado->campo('permisoMonitor', 0);
		$iComandosGPRS 	= $resultado->campo('permisoComandosGPRS', 0);
		$iComandosSMS 	= $resultado->campo('permisoComandosSMS', 0);
		$iVerReportes 	= $resultado->campo('permisoVerReportes', 0);
		$iVerPuntos 	= $resultado->campo('permisoVerPuntos', 0);
		$iVerZonas 		= $resultado->campo('permisoVerZonas', 0);
		$iVerContactos 	= $resultado->campo('permisoVerContactos', 0);
		$iVerLogistica 	= $resultado->campo('permisoVerLogistica', 0);
     	$iModificaPuntos= $resultado->campo('permisoModificarPuntos', 0);
     	$iModificaZonas	= $resultado->campo('permisoModificarZonas', 0);
		$iModificaContactos	= $resultado->campo('permisoModificarContactos', 0);
		$iModificarLogistica= $resultado->campo('permisoModificarLogistica', 0);
		$iAccessMovil	= $resultado->campo('permisoMobile', 0);
		$iAccedeSetup	= $resultado->campo('permisoAccedeSetup', 0);
		$iAccedeEventos = $resultado->campo('permisoAccedeEventos', 0);
		$iAccedeUsuario = $resultado->campo('permisoAccedeUsuarios', 0);
     	$iAccedeFacturas= $resultado->campo('permisoAccedeFacturas', 0);
		$iAccedeZonas	= $resultado->campo('permisoAccedeZonas', 0);
		$iAccedeContactos	= $resultado->campo('permisoAccedeContactos', 0);
		$iAccedeHorarios= $resultado->campo('permisoAccedeHorarios', 0);
		$iHabilitaFijo 	= $resultado->campo('habilitarFijo', 0);
		$iHabilitaMovil = $resultado->campo('habilitarMovil', 0);
		$iHabilitaFlota = $resultado->campo('habilitarFlota', 0);
		$iHabilitaRC	= $resultado->campo('habilitarRC', 0);
		$iHabilitaRCFijo= $resultado->campo('habilitarRCFijo', 0);
		$iVerRutas		= $resultado->campo('permisoVerRutas', 0);
		$iModificarRutas= $resultado->campo('permisoModificarRutas', 0);
		$iVerAgendaGral = $resultado->campo('permisoVerAgendaGral', 0);
		$iModificarAgendaGral= $resultado->campo('permisoModificaAgendaGral', 0);

		$loginClassActual->PERMISOSAlias = array($iMonitorea,$iComandosGPRS,$iComandosSMS,$iVerReportes,$iVerPuntos,$iVerZonas,$iVerContactos,$iVerLogistica,
		$iModificaPuntos,$iModificaZonas,$iModificaContactos,$iModificarLogistica,$iAccessMovil,$iAccedeSetup,$iAccedeEventos,$iAccedeUsuario,
		$iAccedeFacturas,$iAccedeZonas,$iAccedeContactos,$iAccedeHorarios,$iHabilitaFijo,$iHabilitaMovil,$iHabilitaFlota,
		$iHabilitaRC,$iHabilitaRCFijo,$iVerRutas,$iModificarRutas,$iVerAgendaGral,$iModificarAgendaGral);
     	return  $loginClassActual;
     }
	 /**********************************************************************/
	function LoginDealer($loginClass){
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginDealer' ". mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}

		$LOGGER->addLine('INFO', 'Login Dealer -> "'.$loginClassActual->codigoDealer.'"');

		$SQL = "SELECT *, ";
		$SQL.= "CONCAT_WS(' ', cast(d.nombre as char), cast(d.apellido as char)) as descripcion ";
		$SQL.= "FROM dealer d ";
		$SQL.= "WHERE d.login ='". trim($loginClassActual->codigoDealer) . "'";

	  	if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginDealer' " . $mysqli->error.' CONSULTA: '.$SQL );
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
			$LOGGER->addLine('FATAL', 'ERROR 5');
     		$loginClassActual->errorCode = 42;
       		return  $loginClassActual;
     	}

     	$loginClassActual->cuentaFk = $resultado->campo('id', 0);
		$loginClassActual->esFlota 	= 5;//antes estaba seteado con 1
		$loginClassActual->imagen 	= $resultado->campo('imagen', 0);
		$loginClassActual->tablaId 	= $resultado->campo('id', 0);
		$loginClassActual->labelCuenta 	= $resultado->campo('descripcion', 0);
		$loginClassActual->objetivo	= 5;
		$loginClassActual->objetivoDB 	= 5;
		//INICIALIZO EL ARRAY DE PERMISOS DE OBJETIVOS DEALER
		$monitorea 					= $resultado->campo('permisoMonitor', 0);
		$comandosGPRS 				= $resultado->campo('permisoComandosGPRS', 0);
		$comandosSMS 				= $resultado->campo('permisoComandosSMS', 0);
		$puntos 					= $resultado->campo('permisoPuntos', 0);
		$zonas 						= $resultado->campo('permisoZonas', 0);
		$logistica 					= $resultado->campo('permisoLogistica', 0);
		$visualizaContactos 		= $resultado->campo('permisoVisualizaContactos', 0);
		$modificaContactos 			= $resultado->campo('permisoModificaContactos', 0);
		$permisoEventosPorMoviles 	= $resultado->campo('permisoEventosPorMoviles', 0);
		$permisoRutas 	= $resultado->campo('permisoRutas', 0);
		$loginClassActual->PERMISOSdealer = array($monitorea,$comandosGPRS,$comandosSMS,$puntos,$zonas,$logistica,$visualizaContactos,$modificaContactos,$permisoEventosPorMoviles,$permisoRutas);
     	return  $loginClassActual;
     }


	/**********************************************************************/
	function LoginFlota($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginFlota' " . mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$LOGGER->addLine('INFO', 'Login Flota -> "'.$loginClassActual->codigoFlota.'"');

		$SQL = " SELECT tlma.ORDER_ID as cuentaFk from tlmapersonas tlma " .
			   " WHERE tlma.USER_WEB = '" . $loginClassActual->codigoFlota . "'" .
			   " AND tlma.ES_FLOTA = true";

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 6;
       		return  $loginClassActual;
     	}
     	$loginClassActual->cuentaFk = $resultado->campo('cuentaFk', 0);
     	$loginClassActual->tablaId = $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota = 1;
		$loginClassActual->objetivo = 3;
		$loginClassActual->objetivoDB = 3;
		$loginClassActual->labelCuenta = $loginClassActual->codigoFlota;
		return $loginClassActual;
	}
	/**********************************************************************/
	function LoginCuenta($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginCuenta' ". mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$LOGGER->addLine('INFO', 'Login Cuenta -> "'.$loginClassActual->codigocuenta.'"');

		$SQL = " SELECT abma.ORDER_ID as cuentaFk, abma.objetivo as objetivo, ".
			   " abma.LOCKSTAT as lockStat, ".
			   " abma.latitud as latitud, ".
			   " abma.longitud as longitud, ".
			   " abma.LOCKDATE as lockDate,	".
			   " now() as fechaActual	".
			   " FROM abmacodigos abma "	.
			   " INNER JOIN rcmacodigos rc on (rc.ORDER_ID = abma.ID_RC) " .
               " WHERE rc.CODIGOALFA = '" 	. $loginClassActual->codigorc . "'" .
               " AND abma.ID_CL = '" 		. $loginClassActual->codigocuenta . "'" .
               " AND abma.PARTICION = " 	. $loginClassActual->particion .
               " AND abma.OBJETIVO = "		. $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginCuenta' " . $mysqli->error.' CONSULTA: '.$SQL );
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0){
     		$loginClassActual->errorCode = 7;
       		return  $loginClassActual;
     	}
     	$f1 = $resultado->campo('lockDate', 0);
     	$f2 = $resultado->campo('fechaActual', 0);
     	if($resultado->campo('lockStat', 0) == 1 && ( $f1 != null && !fechaAnteriorA($f2,$f1) ) ){
     		$loginClassActual->errorCode = 52;
       		return  $loginClassActual;
     	}

     	$loginClassActual->cuentaFk = $resultado->campo('cuentaFk', 0);
     	$loginClassActual->tablaId = $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota = 0;
		$loginClassActual->objetivo = $resultado->campo('objetivo', 0);
		$loginClassActual->objetivoDB = $resultado->campo('objetivo', 0);
		$loginClassActual->labelCuenta = $loginClassActual->codigorc."-".$loginClassActual->codigocuenta;

		return $loginClassActual;
	}
	/**********************************************************************/
	function ProcesarLogin($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		if ($loginClass->errorCode != 0) return $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()) {
     		$LOGGER->addLine('ERROR',"FUNCION: 'ProcesarLogin' " .  mysqli_connect_error() );
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
     	if ($loginClassActual->objetivoDB == 1 || $loginClassActual->objetivoDB == 2 ) {
			if (BYKOM_DB_TYPE == 0) {
				$SQL = "SELECT abma.objetivo as objetivo, " .
						  "abma.AB_ENVCLAVE as clave, " .
						  "elt(abma.WEBCLIENTE,1,0) as habilitado, " .
						  "abma.MONITOREO_WEB as monitoreoWeb, " .
						  "ie.email as mail, " .
						  "abma.ENVIO_GPRS as envioGPRS, " .
						  "abma.ENVIO_SMS as envioSMS , ".
						  "abma.CLIENTE_PRO as isPRO, " .
						  "abma.CONEXIONES_CONCURRENTES as limitConnect, ".
						  "abma.ACCESS_PHONE as accessPhone ".
					 "FROM abmacodigos abma " .
					 " LEFT JOIN internet_email ie on (abma.email_env = ie.codigoemai)" .
				     " WHERE abma.order_id = " . $loginClassActual->cuentaFk;
			} else {
				$SQL = "SELECT abma.objetivo as objetivo, " .
						  "abma.AB_ENVCLAVE as clave, " .
						  "elt(abma.WEBCLIENTE,1,0) as habilitado, " .
						  "abma.MONITOREO_WEB as monitoreoWeb, " .
						  "abma.email_env as mail, " .
						  "abma.ENVIO_GPRS as envioGPRS, " .
						  "abma.ENVIO_SMS as envioSMS , ".
						  "abma.CLIENTE_PRO as isPRO, " .
						  "abma.CONEXIONES_CONCURRENTES as limitConnect, ".
						  "abma.ACCESS_PHONE as accessPhone ".
					 "FROM abmacodigos abma " .
				     " WHERE abma.order_id = " . $loginClassActual->cuentaFk;
			}
		} else {
			if ($loginClassActual->objetivo == 5 || $loginClassActual->esFlota == 5){ //es una cuenta DEALER
				$SQL = "SELECT 5 as objetivo, d.clave as clave, elt(d.habilitado,1,0) as habilitado, d.permisoMonitor as monitoreoWeb,
				d.email as mail, d.permisoComandosGPRS as envioGPRS, d.permisoComandosSMS as envioSMS, 1 as isPRO,
				d.CONEXIONES_CONCURRENTES as limitConnect,	d.permisoPuntos as iPermisoPuntos, d.permisoZonas as iPermisoZonas,
				d.permisoLogistica as iPermisoLogistica, d.permisoVisualizaContactos as iPermisoVisualizaContactos,
				d.permisoModificaContactos as iPermisoModificaContactos, d.permisoEventosPorMoviles as iPermisoEventosPorMoviles,
				d.permisoRutas as iPermisoRutas,  1 as accessPhone
					FROM dealer d " .
				    " WHERE d.id = " . $loginClassActual->cuentaFk;
			}else{	//es una cuenta tipo FLOTA
				if (BYKOM_DB_TYPE == 0) {
					$SQL = "SELECT 3 as objetivo, " .
							"tlma.PASS_WEB as clave, " .
							"elt(tlma.WEBCLIENTE,1,0) as habilitado, " .
							"tlma.MONITOREO_WEB as monitoreoWeb, " .
							"ie.email as mail, " .
							"tlma.ENVIO_GPRS as envioGPRS, " .
							"tlma.ENVIO_SMS as envioSMS, ".
				            "tlma.CLIENTE_PRO as isPRO, " .
				            "tlma.CONEXIONES_CONCURRENTES as limitConnect, ".
						    "tlma.ACCESS_PHONE as accessPhone " .
						  "FROM tlmapersonas tlma " .
				     	" LEFT JOIN internet_email ie on (tlma.codigoemai = ie.codigoemai)" .
				     	" WHERE tlma.order_id = " . $loginClassActual->cuentaFk;
				} else {
					$SQL = "SELECT 3 as objetivo, " .
							"tlma.PASS_WEB as clave, " .
							"elt(tlma.WEBCLIENTE,1,0) as habilitado, " .
							"tlma.MONITOREO_WEB as monitoreoWeb, " .
							"tlma.codigoemai as mail, " .
							"tlma.ENVIO_GPRS as envioGPRS, " .
							"tlma.ENVIO_SMS as envioSMS, ".
				            "tlma.CLIENTE_PRO as isPRO, " .
				            "tlma.CONEXIONES_CONCURRENTES as limitConnect, ".
						    "tlma.ACCESS_PHONE as accessPhone " .
						  "FROM tlmapersonas tlma " .
				     	" WHERE tlma.order_id = " . $loginClassActual->cuentaFk;
				}
			}
		}
		$LOGGER->addLine('INFO', ' CONSULTA: '.$SQL);
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'ProcesarLogin' " . $mysqli->error.' CONSULTA: '.$SQL );
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 8;
       		return  $loginClassActual;
     	}

     	//Si no es alias, le seteo mail y clave de la cuenta. Sino obtuvo la info del alias.
     	if ($loginClassActual->objetivo != 4) {
     		$loginClassActual->passwordDB 		= $resultado->campo('clave', 0);
     		$loginClassActual->mail 			= $resultado->campo('mail', 0);
     		$loginClassActual->accessPhoneCuenta= $resultado->campo('accessPhone', 0);
     	}
     	$loginClassActual->objetivoDB 	= $resultado->campo('objetivo', 0);
     	$loginClassActual->habilitado 	= $resultado->campo('habilitado', 0);
   		$loginClassActual->monitoreoWeb = $resultado->campo('monitoreoWeb', 0);
		$loginClassActual->envioGPRS 	= $resultado->campo('envioGPRS', 0);
		$loginClassActual->envioSMS 	= $resultado->campo('envioSMS', 0);
		$loginClassActual->isPRO 		= $resultado->campo('isPRO', 0);
		$loginClassActual->limitConnect = $resultado->campo('limitConnect', 0);
		$adminCNF 						= BykomCliente::getAdminConfig();
		$loginClassActual->chat 		= $adminCNF->campo('chat', 0);
		$blockLoginFail 				= $adminCNF->campo('blockLoginFail', 0);

		if($loginClassActual->objetivo == 4){//Alias
			$SQLAlias = "select
				permisoMonitor,	permisoComandosGPRS, permisoComandosSMS, permisoVerReportes, permisoVerPuntos, permisoVerZonas, permisoVerContactos, permisoVerLogistica,
				permisoModificarPuntos, permisoModificarZonas, permisoModificarContactos, permisoModificarLogistica, permisoMobile, permisoAccedeSetup, permisoAccedeEventos, permisoAccedeUsuarios,
				permisoAccedeFacturas, permisoAccedeZonas, permisoAccedeContactos, permisoAccedeHorarios, habilitarFijo, habilitarMovil, habilitarFlota,
				habilitarRC, habilitarRCFijo, permisoVerRutas, permisoModificarRutas, permisoVerAgendaGral, permisoModificaAgendaGral
				from  aliases a where a.id = ".$loginClassActual->tablaId;

			if (!$mysqli->real_query($SQLAlias)) {
				$LOGGER->addLine('ERROR',"FUNCION: 'ProcesarLogin' " . $mysqli->error.' CONSULTA: '.$SQLAlias );
	      		$loginClassActual->errorCode = 2;
	       		return  $loginClassActual;
	     	}
	     	$resultado2 = BykomCliente::getResultado($mysqli);
	     	if ($resultado2->cantidad() == 0) {
	     		$loginClassActual->errorCode = 8;
	       		return  $loginClassActual;
	     	}
			$loginClassActual->accessPhoneCuenta= $resultado2->campo('permisoMobile', 0);

			if($loginClassActual->esFlota == 5){//si es un alias de un dealer
				$monitorea 		= $resultado->campo('monitoreoWeb', 0);
				$comandosGPRS 	= $resultado->campo('envioGPRS', 0);
				$comandosSMS 	= $resultado->campo('envioSMS', 0);
				$puntos 		= $resultado->campo('iPermisoPuntos', 0);
				$zonas 			= $resultado->campo('iPermisoZonas', 0);
				$logistica 		= $resultado->campo('iPermisoLogistica', 0);
				$visualizaContactos = $resultado->campo('iPermisoVisualizaContactos', 0);
				$modificaContactos 	= $resultado->campo('iPermisoModificaContactos', 0);
				$iPermisoEventosPorMoviles 	= $resultado->campo('iPermisoEventosPorMoviles', 0);
				$iPermisoRutas	= $resultado->campo('iPermisoRutas', 0);
				$loginClassActual->PERMISOSdealer = array($monitorea,$comandosGPRS,$comandosSMS,$puntos,$zonas,$logistica,$visualizaContactos,$modificaContactos,$iPermisoEventosPorMoviles,$iPermisoRutas);
			}
		}

     	if ($loginClassActual->habilitado == 0) {
     		$loginClassActual->errorCode = 9;
       		return  $loginClassActual;
     	}
     	$LOGGER->addLine('INFO',"Cuenta de mail es|" . $loginClassActual->mail . "|");
     	if (trim($loginClassActual->mail) == '') {
     		$loginClassActual->errorCode = 10;
       		return  $loginClassActual;
     	}

     	if (trim($loginClass->passwordDB) == '') {
     		$loginClassActual->errorCode = 11;
     		/*if (BykomCliente::recordatorioDePassword($loginClassActual->cuentaFk, $loginClassActual->objetivoDB) != 1) {
     			$loginClassActual->errorCode = 2;
     		}*/
     		$loginClassActual->errorCode = 16;
     		return  $loginClassActual;
     	}

     	$loginClassActual = BykomCliente::checkLoginCliente($loginClassActual);
     	if ($loginClassActual->usuariosLogueados > 0) {
     		$loginClassActual->errorCode = 18;
       		return  $loginClassActual;
     	}

     	$loginClassActual = BykomCliente::ComprobarAbrlLogin($loginClassActual);
     	if ($loginClassActual->errorCode != 0) {
     		return $loginClassActual;
     	}
     	if (($loginClassActual->contadorLoginFail >= $blockLoginFail) && ($blockLoginFail != 0)) {
     		$loginClassActual->errorCode = 12;
       		return  $loginClassActual;
     	}

     	if ($loginClassActual->password != $loginClassActual->passwordDB) {
     		$loginClassActual->contadorLoginFail = $loginClassActual->contadorLoginFail + 1;
     		$loginClassActual = BykomCliente::updateAbrlLogin($loginClassActual, $loginClassActual->contadorLoginFail);
     		$loginClassActual->errorCode = 13;
       		return  $loginClassActual;
     	} else {
     		$loginClassActual = BykomCliente::updateAbrlLogin($loginClassActual, 0);
     		$loginClassActual->contadorLoginFail = 0;
     		$loginClassActual->errorCode = 0;
     		return $loginClassActual;
     	}
     	$loginClassActual->errorCode = 30;
     	return $loginClassActual;
	}
	/**********************************************************************/
	function recordatorioDePassword($cuentaFk, $objetivo) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "INSERT INTO recordatorio (cuentaFk, objetivo, tipo, enviado) " .
		       " VALUES (" . $cuentaFk . ", " . $objetivo. ", 1, 0)" ;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'recordatorioDePassword' " . $mysqli->error.' CONSULTA: '.$SQL);
      		return 0;
     	}
     	return  1;
	}
	/**********************************************************************/
	function ComprobarAbrlLogin($loginClassActual) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "select abrllogin.CONTADOR as contador, abrllogin.ULTIMAFECHA as fecha" .
			       " from abrllogin where abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
			       " and abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'ComprobarAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);

     	if ($resultado->cantidad() == 0) {
     		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
       		$SQL = "insert into abrllogin (abrllogin.ORDER_RL, abrllogin.CONTADOR, abrllogin.ULTIMAFECHA,abrllogin.`TYPE`)
       				values (". $loginClassActual->tablaId.", 0, now(), ".$loginClassActual->objetivo.")";
            if (!$mysqli->real_query($SQL)) {
				$LOGGER->addLine('ERROR',"FUNCION: 'ComprobarAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      			$loginClassActual->errorCode = 2;
       			return  $loginClassActual;
     		}
     	}
     	$SQL = "select abrllogin.CONTADOR as contador, abrllogin.ULTIMAFECHA as fecha" .
			       " from abrllogin where abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
			       " and abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'ComprobarAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	$loginClassActual->contadorLoginFail = $resultado->campo('contador', 0);
     	$loginClassActual->ultimaFecha = $resultado->campo('fecha', 0);
     	return $loginClassActual;
	}

	/**********************************************************************/
	function updateAbrlLogin($loginClassActual, $valor) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "UPDATE abrllogin SET abrllogin.CONTADOR = " . $valor .
               " WHERE abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
               " AND abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'updateAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	return $loginClassActual;
	}

	/**********************************************************************/
	function checkLoginCliente($loginClassActual) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "SELECT ul.logueado FROM userlogued ul" .
               " WHERE ul.logueado = 1 AND" .
               " ul.cuentaFk = "  . $loginClassActual->cuentaFk .
               " AND ul.objetivo = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'checkLoginCliente' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$respuesta = BykomCliente::getResultado($mysqli);
     	$loginClassActual->usuariosLogueados = $respuesta->cantidad();
     	return $loginClassActual;
	}

	/**********************************************************************/
	function Login ($codigorc,$codigocuenta,$particion,$password,$objetivo){
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "call z_Login_Cliente2('$codigorc','$codigocuenta','$particion','$password','$objetivo')";
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'Login' " . $mysqli->error.' CONSULTA: '.$SQL);
      		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      		exit();
    	}
    	return BykomCliente::getResultado($mysqli);
	}

    /**********************************************************************/
	function LoginBykom ($userId, $clavePublica){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    $claveEncriptada = strtoupper(md5($clavePublica.PRIVATE_KEY));

		$SQL = "SELECT *, now() as HORA , AES_DECRYPT(u.OPDATA, '1234') as PERMISOS FROM `usersbykomweb` u ";
	    $SQL .= "WHERE u.`USER_ID` = $userId AND u.`CLAVE` = '$claveEncriptada'";
		if (!$mysqli->real_query($SQL)){
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginBykom' " . $mysqli->error.' CONSULTA: '.$SQL);
	     	printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
	     	exit();
	    }
     	return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function LoginDataActivation($keyCode){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		 $SQL = "SELECT AES_DECRYPT(a.dato, '$keyCode') as data, " .
				"AES_DECRYPT(a.restricciones,'$keyCode') as restricciones, " .
				"AES_DECRYPT(a.timex_master,'$keyCode') as timexMaster, " .
				"MINUTE(TIMEDIFF(NOW(),AES_DECRYPT(a.timex_master,'$keyCode'))) as dif " .
				"FROM `activacion` a limit 1";
		if (!$mysqli->real_query($SQL)){
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginDataActivation' " . $mysqli->error.' CONSULTA: '.$SQL);
	      	exit();
	    }
     	return BykomCliente::getResultado($mysqli);
	}
	echo file_get_contents('cCliente1.txt');
	echo file_get_contents('cCliente2.txt');
	echo file_get_contents('cCliente3.txt');
	echo file_get_contents('cCliente4.txt');
	/*require_once("cCliente1.php");
	require_once("cCliente2.php");
	require_once("cCliente3.php");
	require_once("cCliente4.php");*/
}
?>